PHP 語法基礎


Posted by tzutzu858 on 2020-08-25

常用的三種動態網頁語言有

  1. ASP (Active Server Pages) : Microsoft開發的動態網頁語言,只能執行於微軟的伺服器產品
  2. PHP (PHP原始為Personal Home Page的縮寫,已經正式更名為"PHP: Hypertext Preprocessor")
  3. JSP (Java Server Pages) : 適合基於 JAVA 技術的 JSP(結合 JavaBean 和 EJB )

XAMPP

XAMPP 是一個把 Apache 網頁伺服器與 PHP、Perl 及 MariaDB 集合在一起的安裝包,允許用戶可以在自己的電腦上輕易的建立網頁伺服器。使用 XAMPP ,PHP 檔案都會放在 htdocs。
htdocs 是 host documents 的縮寫。直接翻譯就是主機文件。Hosts 文件主要作用是定義 IP 地址和主機名的映射關係,是一個映射 IP 地址和主機名的規定。
所以之後可以在 htdocs 資料夾,新增一個資料夾裡面放 PHP 檔案。
要注意的是只有在 xampp 預設是這樣放,但其他語言或 PHP 其他框架可能不是這樣。

  • <?php?> 包起來

    <?php
    把 PHP 包在裡面
    ?>
    
  • 變數宣告,用 $ 字號來表示
    javaScript : var a = 1;
    php : $a = 1;

  • 字串串接
    和其他語言比較不一樣的是用 . 接起來

    <?php
    $a = "aaaaaaaaa";
    $b = "bbbbbbbbb";
    echo $a . $b;
    ?>
    
  • 迴圈 : 變數要 $ 開頭

    <?php
    for($i=1; $i<=10; $i++) {
      echo $i; . "<br>";
    }
    ?>
    
  • array

    <?php
    $arr = array(1, 2, 3, 4, 5);
    echo "length:" . sizeof($arr) . "<br>";
    echo $arr[sizeof($arr) - 1];
    ?>
    
  • 把 array 輸出要轉成 string
    var_dump : 函式的功能是用來印出變數的相關訊息(變數的型態跟值)
    print_r : 印出陣列(PHP Array)的內容

<?php
$arr = array("gdgsdg", 2, 3, 4, 5);
var_dump($arr);

print_r($arr);
?>

初探 PHP

在開始前一定要做的事:Disable cache
原本有快取是因為想要載入比較快,所以先把資料先暫存住。
XAMPP 有時候也會把一些資源暫存住,例如你改了一些檔案,重新整理發現沒變,可能原因是瀏覽器把暫存了之前那份檔案。


從前端傳資料給後端:GET 與 POST

  • QueryString

    QueryString 會自動存到 data.php,你可以用 $_GET 這個特殊的變數,PHP 幫你準備好的變數

indext.php 檔

<?php
echo "gogogogo";
?>

<form method="GET" action="data.php">
  name: <input name="name" />
  age: <input name="age" />
  <input type="submit" />
</form>

data.php 檔

<?php
    if (!isset($_GET['name']) || !isset($_GET['age'])) {
    echo '資料有缺,請再次填寫<br>';
    exit();
    }

echo "Hello" . $_GET['name'] . "<br>";
echo "Your age is" . $_GET['age'] . "<br>";
print_r($_GET);

?>

假設網址是 ?a=&b=,只有傳 key 沒有傳 value,isset 的結果依舊會是 true
必須連 key 都沒有傳,isset 才會是 false
因此針對這種檢查,會推薦使用 empty 來檢測,因為 empty 可以順便檢測空字串的狀況

PHP isset()和empty()的區別

用 empty 檢查表單是否為空,且用 $_POST 存資料
把 indext.php 檔案裡 form 的 method 改成 "POST"

<?php
    if(empty($_POST['name']) || empty($_POST['age'])){
        echo '資料有缺,請再次填寫<br>';
        exit(); 
    };

    echo "Hello!!!" . $_POST['name'] . "<br>";
    echo "Your age is" . $_POST['age'] . "<br>";

    print_r($_POST);
?>

$_GET$_POST 可以混用,但不建議


Cookie 簡介與實作

setcookiehttp://php.net/manual/en/function.setcookie.php
$_COOKIEhttp://php.net/manual/en/reserved.variables.cookies.php)

setcookie 常用到的三個參數 :

舉例 :

setcookie ( $name, $value, $expire)
$name = "username";
$value = $_POST['username'];
$expire = time() + 3600 * 24 * 30;

把設定好的 Cookie 取值出來,使用 $_COOKIE

echo $_COOKIE['username'];

刪除 Cookie

  1. 將 setcookie() 函式中第二個引數設定為空值
  2. 第三個引數 cookie 的過期時間設定為小於系統的當前時間,或是直接設為 0 就好
setcookie("username", "", 0);

好文推推 :

  1. 白話 Session 與 Cookie:從經營雜貨店開始
  2. 淺談 Session 與 Cookie:一起來讀 RFC
  3. 深入 Session 與 Cookie:Express、PHP 與 Rails 的實作

Huli 影片補充 :

die 跟 exit 這兩個 function 其實是一樣的
根據 exit 的文件:https://www.php.net/manual/en/function.exit.php
後面放的東西如果是數字的話,會被當作是一個錯誤的狀態碼然後不會被顯示出來(原本我在影片中猜測的是 HTTP status,但不是這樣),所以才會是空的
因此後面加上一個字串變成字串之後就會正常顯示出來了










Related Posts

Secure Apache Using Certbot with Let's Encrypt on Ubuntu 20.04

Secure Apache Using Certbot with Let's Encrypt on Ubuntu 20.04

JavaScript 提升(Hoisting)概念

JavaScript 提升(Hoisting)概念

Callback

Callback


Comments